//------------------------------------------------------------------------------
//SFWK Framework
//Copyright (C) 2011 SQLI

//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.

//You should have received a copy of the GNU General Public License
//along with this program.  If not, see <http://www.gnu.org/licenses/>.
//------------------------------------------------------------------------------

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Linq.Expressions;

namespace SFWK.Core.ExpressionBuilder
{
    public class EditableExpressionCollection : List<EditableExpression>
    {
        public EditableExpressionCollection() : base() { }
        public EditableExpressionCollection(IEnumerable<EditableExpression> source) : base(source) { }
        public EditableExpressionCollection(IEnumerable<Expression> source) 
        {
            foreach (Expression ex in source)
                this.Add(EditableExpression.CreateEditableExpression(ex));
        }
        
        public IEnumerable<Expression> GetExpressions()
        {
            foreach (EditableExpression editEx in this)
                yield return editEx.ToExpression();
        }

        public IEnumerable<ParameterExpression> GetParameterExpressions()
        {
            foreach (EditableExpression editEx in this)
                if (editEx is EditableParameterExpression)
                {
                    EditableParameterExpression parmEx = editEx as EditableParameterExpression;
                    yield return new EditableParameterExpression(parmEx.Type, parmEx.Name).ToExpression() as ParameterExpression;
                }
        }
    }
}

